Micron Document
Livres et Wikis | Archives | Info


C Sharp
layout: Wide · Narrow · Centered
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
top
C# (C sharp [siː.ʃɑːp] en anglais britannique) est un langage de programmation orientĂ©e objet, commercialisĂ© par Microsoft depuis 2002cite-ref-tata-2-0[2] et destinĂ© Ă  dĂ©velopper sur la plateforme Microsoft .NET, au mĂȘme titre que d’autres langages liĂ©s Ă  cette plateforme (ex. : VB .NET, J#, etc.).

C# est dérivé du C++ et trÚs proche du Java dont il reprend la syntaxe générale ainsi que les concepts, y ajoutant des notions telles que la surcharge des opérateurs, les indexeurs (en) et les délégués. Il est utilisé notamment pour développer des applications web sur la plateforme ASP.NET, ainsi que des jeux vidéo avec les moteurs de jeux Unity et Godotcite-ref-3[3].

Contents

‱ Syntaxe
‱ Histoire
‱ Versions
‱ C# 2.0
‱ C# 3.0
‱ C# 4.0
‱ C# 5.0
‱ C# 6.0
‱ C# 7.0
‱ C# 8.0
‱ C# 9.0
‱ C# 10.0
‱ C# 11.0
‱ C# 12.0
‱ C# 13.0
‱ Voir aussi
‱ Annexes

──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

Présentation

C# est un langage de programmation orientĂ©e objet, fortement typĂ©, dĂ©rivĂ© de C et de C++, ressemblant au langage Javacite-ref-tata-2-1[2]. Il est utilisĂ© pour dĂ©velopper des applications web, ainsi que des applications de bureau, des services web, des commandes, des widgets ou des bibliothĂšques de classescite-ref-tata-2-2[2]. En C#, une application est un lot de classes oĂč une des classes comporte une mĂ©thode Main, comme cela se fait en Javacite-ref-tata-2-3[2].

C# est destiné à développer sur la plateforme .NET, une pile technologique créée par Microsoft pour succéder à COM.

Les exĂ©cutables en C# sont subdivisĂ©s en assemblies, en namespaces, en classes et en membres de classecite-ref-addison-4-0[4]. Un assembly est la forme compilĂ©e, qui peut ĂȘtre un programme (un exĂ©cutable) ou une bibliothĂšque de classes (une dll). Un assembly contient le code exĂ©cutable en MSIL, ainsi que les symboles. Le code MSIL est traduit en langage machine au moment de l'exĂ©cution par la fonction just-in-time de la plateforme .NETcite-ref-addison-4-1[4].

Plateforme .NET

C# est destinĂ© Ă  dĂ©velopper sur la plateforme .NET. Le cƓur de cette pile technologique est le framework .NET, composĂ© decite-ref-tata-2-4[2] :

‱ les environnements ASP.NET et Winforms (qui servent Ă  exĂ©cuter respectivement des applications web et de bureau) conçus pour la plateforme .NETcite-ref-tata-2-5[2] ;
‱ une bibliothĂšque de classes qui permet de manipuler des fichiers, manipuler des tableaux ou des structures en arbres, accĂ©der Ă  Internet, crĂ©er des interfaces graphiques, accĂ©der Ă  des bases de donnĂ©es, accĂ©der au registre Windows et beaucoup d'autres choses. La plupart des fonctionnalitĂ©s sont offertes par des classes de l'espace de noms Systemcite-ref-tata-2-6[2] ;

‱ le Common Language Runtime (abr. CLR) est le runtime utilisĂ© par les langages de la plateforme .NET (C#, Visual Basic .NET, J#, etc.), les services fournis par la CLR sont le lancement et l'exĂ©cution de programmes, le ramasse-miettes et la gestion d'exceptions. Un programme pour la plateforme .NET est tout d'abord compilĂ© en une forme intermĂ©diaire, le MSIL, puis ce code MSIL est transformĂ© en code machine qui sera exĂ©cutĂ© par la CLR. Ce code machine est appelĂ© managed code parce que son exĂ©cution est sous le contrĂŽle de la CLRcite-ref-tata-2-7[2].

Un autre produit de la plateforme .NET est l'environnement de développement Visual Studio .NET, outil généralement utilisé pour programmer en C#cite-ref-tata-2-8[2].

Caractéristiques

C# est un langage dérivé du C++, il apporte un typage sûr, ainsi que les possibilités d'encapsulation, d'héritage et de polymorphisme des langages orientés objetcite-ref-tata-2-9[2]. En C# tous les types sont des objetscite-ref-tata-2-10[2]. Le langage comporte un ramasse-miettes et un systÚme de gestion d'exceptionscite-ref-tata-2-11[2].

Le typage sûr signifie notamment que les opérations suivantes sont refusées : utilisation de variable non initialisée, tentative d'accéder au-delà des limites d'un tableau, conversions de type dont les résultats ne sont pas prévisibles, dépassement des limites lors d'opérations arithmétiquescite-ref-tata-2-12[2].

Beaucoup de possibilités de Java se retrouvent dans C# et il y a une forte ressemblance entre un code écrit en C# et le code équivalent en Javacite-ref-tata-2-13[2].

En C# les variables peuvent ĂȘtre d'un type valeur ou d'un type rĂ©fĂ©rence. Les types valeur sont les types primitifs, les Ă©numĂ©rations, les struct et les types nullablecite-ref-addison-4-2[4]. Les types rĂ©fĂ©rence sont les classes, les interfaces, les tableaux et les delegatecite-ref-addison-4-3[4].

Types primitifs

Les types primitifs sont sbyte, short, int, long, byte, ushort, uint, ulong, char, float, double, decimal et boolcite-ref-addison-4-4[4].

class

Les constructions les plus fondamentales du langage C# sont les classes. Celles-ci peuvent contenir des constantes, des champs, des propriétés, des indexeurs, des méthodes, des événements, des opérateurs, des constructeurs, des destructeurs ou des sous-classescite-ref-addison-4-5[4]. Les classes élémentaires sont string et objectcite-ref-addison-4-6[4].

struct

Les struct sont similaires aux classes, mais ce sont des types valeurs et ils ne peuvent pas ĂȘtre hĂ©ritĂ©scite-ref-addison-4-7[4].

delegate

Un delegate est une référence à une méthode qui comporte certains paramÚtres. Les delegates permettent d'assigner des méthodes à des variables et les passer en paramÚtrecite-ref-addison-4-8[4].

enum

Un type énuméré est un type valeur qui comporte un lot de constantes. Chaque type énuméré a un type sous-jacent : un type primitif déterminé en fonction des valeurs des constantes.

type nullable

Les nullable sont des types primitifs qui peuvent en plus avoir la valeur nullcite-ref-addison-4-9[4]. Chaque type primitif T a un type nullable associé T?. Par exemple une variable de type int? peut contenir un int ou nullcite-ref-addison-4-10[4].

Syntaxe


using System;
public class HelloWorld
{
public static void Main(string[] args)
{
Console.WriteLine("Salut tout le monde!");
}
}

Mots clé

Les mots clé de C# 1.0 sont :

abstract class event if new readonly
as const explicit implicit null ref
base continue extern in object return
bool decimal false int operator sbyte
break default finally interface out sealed
byte delegate fixed internal override short
case do float is params sizeof
catch double for lock private stackalloc
char else foreach long protected static
checked enum goto namespace public string
struct throw typeof unchecked using volatile
switch true uint unsafe virtual while
this try ulong ushort void

cite-ref-essential-5-0[5]

Les mots clés ajoutés entre C# 2.0 et 6.0 :

add dynamic join select
alias equals let set
ascending from nameof value
async get on var
await global orderby where
by group partial when
descending into remove yield

cite-ref-essential-5-1[5]

La syntaxe de C# permet de réaliser des chaßnes de caractÚres numériques dont le format est modifiablecite-ref-6[6], notamment avec TimeSpan pour la réalisation de chronomÚtre ou minuteurcite-ref-7[7].

Différences avec le C++

Le langage compte un certain nombre de changements par rapport au C/C++ ; on notera particuliĂšrement les points suivants :

‱ la manipulation directe de pointeurs ne peut se faire qu’au sein d’un code marquĂ© unsafe, et seuls les programmes avec les permissions appropriĂ©es peuvent exĂ©cuter des blocs de code unsafe. La plupart des manipulations de pointeurs se font via des rĂ©fĂ©rences sĂ©curisĂ©es, dont l’adresse ne peut ĂȘtre directement modifiĂ©e, et la plupart des opĂ©rations de pointeurs et d’allocations sont contrĂŽlĂ©es contre les dĂ©passements de mĂ©moire. Les pointeurs ne peuvent pointer que sur des types de valeurs, les types objets, manipulĂ©s par le ramasse-miettes, ne pouvant qu’ĂȘtre rĂ©fĂ©rencĂ©s ;
‱ les objets ne peuvent pas ĂȘtre explicitement dĂ©truits. Le ramasse-miettes s’occupe de libĂ©rer la mĂ©moire lorsqu’il n’existe plus aucune rĂ©fĂ©rence pointant sur un objet. Toutefois, pour les objets gĂ©rant des types non managĂ©s, il est possible d’implĂ©menter l’interface IDisposable pour spĂ©cifier des traitements Ă  effectuer au moment de la libĂ©ration de la ressource ;
‱ l’hĂ©ritage multiple de classes est interdit, mais une classe peut implĂ©menter un nombre illimitĂ© d’interfaces, et une interface peut hĂ©riter de plusieurs interfaces ;
‱ le C# est beaucoup plus typĂ© que le C++ ; les seules conversions implicites sont celles entre les diffĂ©rentes gammes d’entiers et celles d’un type dĂ©rivĂ© Ă  un type parent. Aucune conversion implicite n’a lieu entre boolĂ©ens et entiers, entre membres d’énumĂ©ration et entiers, ni de pointeurs sur un type void (quoique pour ce dernier point l’utilisation de rĂ©fĂ©rences sur le type Object permette d’obtenir le mĂȘme effet). Les conversions dĂ©finies par l’utilisateur peuvent ĂȘtre dĂ©finies comme implicites ou explicites ;
‱ la syntaxe pour la dĂ©claration des tableaux n’est pas la mĂȘme : int[] a = new int[5] remplace int a[5]. Car il s'agit d'une allocation dynamique, int[] a Ă©tant la dĂ©claration d'une rĂ©fĂ©rence (nulle si non initialisĂ©e). L'allocation manuelle d'un tableau sur la pile reste cependant possible avec le mot clĂ© stackalloccite-ref-8[8] ;
‱ les membres d’une Ă©numĂ©ration sont rassemblĂ©s dans leur propre espace de noms ;
‱ le C# ne gĂšre pas les templates, mais cette fonctionnalitĂ© a Ă©tĂ© remplacĂ©e par les types gĂ©nĂ©riques apparus avec C# 2.0 ;
‱ les propriĂ©tĂ©s ont Ă©tĂ© introduites, et proposent une syntaxe spĂ©cifique pour l’accĂšs aux donnĂ©es membres (ainsi que la facilitation de l’accĂšs simultanĂ© par plusieurs threads) ;
‱ la rĂ©flexion totale des types est disponible ;
‱ les dĂ©lĂ©guĂ©s, qui sont des listes de pointeurs sur fonctions, sont utilisĂ©s notamment pour la programmation Ă©vĂ©nementielle.

Différences avec le Java

Bien que le C# soit similaire à Java, il existe des différences notables, par exemple :

‱ Java n'autorise pas la surcharge des opĂ©rateurs ;
‱ Java a des exceptions vĂ©rifiĂ©es, alors que les exceptions du C# ne sont pas vĂ©rifiĂ©es, comme en C++ ;
‱ Java permet la gĂ©nĂ©ration automatique de la documentation HTML Ă  partir des fichiers sources Ă  l'aide des descriptions Javadoc-syntax, tandis que le C# utilise des descriptions fondĂ©es sur le XML ;
‱ Java n'a pas de langage prĂ©processeur ;
‱ C# prend en charge les indexeurs, les mĂ©thodes dĂ©lĂ©guĂ©es, et les Ă©vĂ©nements (lĂ  oĂč Java se contente du patron de conception observateur) ;
‱ C# ne prend pas en charge les implĂ©mentations anonymes d'interfaces et de classes abstraites ;
‱ C# ne prend en charge que les classes internes statiques ;
‱ C# prend en charge les structures en plus des classes (les structures sont des types valeur : on stocke le contenu et non l'adresse) ;
‱ C# utilise une syntaxe intĂ©grĂ©e au langage (DllImportcite-ref-9[9]) et portable pour appeler une bibliothĂšque native, tandis que Java utilise Java Native Interface ;
‱ C# intĂšgre la gĂ©nĂ©ricitĂ© et la machine .NET a Ă©tĂ© modifiĂ©e pour permettre cela (Java l'intĂšgre Ă©galement, mais son implĂ©mentation a Ă©tĂ© rĂ©alisĂ©e dans le compilateur javac sans changer le bytecode Java)cite-ref-10[10].

Histoire

C'est en septembre 2002 que la plateforme .NET et C# sont présentés au publiccite-ref-tata-2-14[2]. C# devient le langage de facto de cette plateforme, il a par ailleurs été utilisé pour implémenter une partie de la plateforme .NETcite-ref-tata-2-15[2].

Versions

| Année | Version | BibliothÚque |
|---|---|---|
| 2002 | 1.0 | .NET framework 1.0 et 1.1 |
| 2005 | 2.0 | .NET framework 2.0 |
| 2008 | 3.0 | .NET framework 3.5 |
| 2010 | 4.0 | .NET framework 4.0 |
| 2012 | 5.0 | .NET framework 4.5 |
| 2015 | 6.0 | .NET framework 4.6 |
| 2017 | 7.0 - 7.3 | .NET framework >= 4.5 et .NET Core 2.X |
| 2019 | 8.0 | .NET standard >=2.1 et .NET Core >=3.0 |
| 2020 | 9.0 | .NET 5.0 |
| 2021 | 10.0 | .NET 6.0 |
| 2022 | 11.0 | .NET 7.0 |
| 2023 | 12.0 | .NET 8.0 |
| 2024 | 13.0 | .NET 9.0 |

| Année | Principal changement |
|---|---|
| 2005 | généricité ajoutée à C# et au framework |
| 2008 | LINQ ( L anguage IN tegrated Q ueries) |
| 2010 | types dynamiques |
| 2012 | méthodes asynchrones |
| 2015 | version pour Linux |
| 2017 | Tuples , fonctions locales |
| 2019 | Membre ReadOnly, opĂ©rateur d’assignatio
 |
| 2020 | Vérification de nullité, instructions d
 |
| 2021 | Directives d’utilisation globale, modùl
 |
| 2022 | Attributs générique, membre requis, cha
 |
| 2023 | Simplification de code |
| 2024 | Amélioration param, lock |

cite-ref-essential-5-2[5]

C# 2.0

Microsoft mit Ă  disposition du public en octobre 2005, aprĂšs une longue pĂ©riode de beta-tests, la version 2.0 de la bibliothĂšque .NET, accompagnĂ©e d’une nouvelle version de la quasi-totalitĂ© des outils associĂ©s. C# ne fait pas exception Ă  la rĂšgle et sort donc en version 2.0, avec les ajouts suivants :

‱ les classes partielles, permettant de rĂ©partir l’implĂ©mentation d’une classe sur plusieurs fichiers ;
‱ les types gĂ©nĂ©riques, qui ne sont pas une simple copie des templates C++. Par exemple, on trouvera dans les gĂ©nĂ©riques C# la restriction de types (pour spĂ©cifier les types utilisables dans une gĂ©nĂ©ralisation). Par contre, il est impossible d’utiliser des expressions comme paramĂštres pour la gĂ©nĂ©ralisation ;
‱ un nouvel itĂ©rateur qui permet l’utilisation de coroutines via le mot-clĂ© yield, Ă©quivalent du yield que l’on trouve en Python ;
‱ les mĂ©thodes anonymes avec des rĂšgles de fermeture configurables ;
‱ les types « nullables », c'est-Ă -dire la possibilitĂ© de spĂ©cifier qu’un type de valeur peut ĂȘtre nul. Ceux-ci sont dĂ©clarĂ©s avec le caractĂšre point d'interrogation « ? » suivant le nom du type, comme ceci : int? i = null;
‱ le nouvel opĂ©rateur double point d'interrogation « ?? » utilise deux opĂ©randes et retourne le premier non nul. Il a Ă©tĂ© introduit pour spĂ©cifier une valeur par dĂ©faut pour les types « nullables ».

À titre de rĂ©fĂ©rence, les spĂ©cifications complĂštes des nouveautĂ©s introduites dans la version 2.0 sont disponibles dans les liens externes.

La fonctionnalitĂ© des types nullables fut corrigĂ©e quelques semaines seulement avant la sortie publique de la version 2.0, car il a Ă©tĂ© mis en lumiĂšre que si la valeur de la variable Ă©tait bien nulle, cette variable n’était pas nulle au sens traditionnel du terme, c'est-Ă -dire qu’il ne s’agit pas d’une rĂ©fĂ©rence vide. Ainsi, la conversion d’un type primitif de valeur nulle en objet donnait une rĂ©fĂ©rence non nulle vers une valeur nulle. Il fallut donc, pour corriger ce problĂšme, corriger le noyau du CLR et effectuer de nombreuses vĂ©rifications et corrections sur tous les produits de la gamme .NET 2.0 (Visual Studio 2005, SQL Server 2005, C# et VB.NET).

C# 3.0

Le C# 3.0 fut présenté au salon Processing Community Daycite-ref-11[11] 2005. La version finale est disponible depuis le 19 novembre 2007 au téléchargement sur le site de Microsoft]cite-ref-12[12]. Les principales nouveautés sont les suivantes :

‱ L’ajout des mots-clefs select, from et where pour permettre la formation et l’exĂ©cution de requĂȘtes SQL, XML, ou directement sur des collections. Cette fonctionnalitĂ© fait partie du programme Language Integrated Query (LINQ)]cite-ref-13[13].
‱ Nouvelle possibilitĂ© d’initialisation d'un objet : À la place de Client c = new Client(); c.Nom = "Dupont";, on peut utiliser Client c = new Client{ Nom = "Dupont" };
‱ Expressions lambda : ListeTrucs.Where( delegate(Truc x) { return x.Size > 10; } ); devient ListeTrucs.Where( x => x.Size > 10 );
‱ InfĂ©rence du type des variables locales : string s = "Dupont" peut ĂȘtre remplacĂ© par var s = "Dupont"
‱ Introduction des types anonymes : var x = new { Nom = "Dupont" } peut ĂȘtre utilisĂ© Ă  la place de class __anonymous { private string _nom; public string Nom { get { return _nom; } set { _nom = value; } } } __anonymous x = new __anonymous(); x.Nom = "Dupont";
‱ Les arbres d'expressions (expression treescite-ref-14[14]) : permettent la compilation du code sous forme d'arbres d'objets facilement analysables et manipulables.
‱ MĂ©thodes Ă©tendues : permet d'ajouter des mĂ©thodes Ă  une classe en y ajoutant un premier paramĂštre this.

Une prĂ©sentation du C# 3.0 et de LINQ peut ĂȘtre trouvĂ©e sur la page du centre de dĂ©veloppement de .NET Framework.

Le code compilĂ© en C# 3.0 est entiĂšrement compatible avec celui du 2.0, Ă©tant donnĂ© que les amĂ©liorations apportĂ©es ne sont que purement syntaxiques ou ne consistent qu’en des raccourcis compensĂ©s au moment de la compilation. Les nouveautĂ©s introduites dans les bibliothĂšques de la version 3.5 (LINQ, etc.) ne sont cependant pas utilisables avec les versions prĂ©cĂ©dentes de C#.

Cette version exige Windows XP ou une version supérieure (Vista ou Windows 7). Elle n'est pas disponible pour Windows 2000.

C# 4.0

La version 4 du langage apporte plusieurs nouveautés :

‱ le typage dynamique des variables Ă  l'aide du mot clĂ© dynamic ;
‱ les arguments nommĂ©s et facultatifscite-ref-15[15] ;
‱ la prise en charge de la covariance et de la contravariance (en) pour les interfaces et les dĂ©lĂ©guĂ©s gĂ©nĂ©riques.

Le framework .NET 4.0 est sorti le 12 avril 2010, accompagné de Visual Studio 2010cite-ref-16[16]. Il propose entre autres :

‱ la nouvelle bibliothùque parallùle : Task Parallel Librarycite-ref-17[17] ;
‱ une version optimisĂ©e de la plate-forme entitĂ© d'accĂšs aux bases de donnĂ©es (Entity Framework) via l'utilisation de LINQ ;
‱ la version parallĂšle de LINQ appelĂ©e PLINQcite-ref-18[18].

C# 5.0

La version 5 du langage permet de programmer plus simplement des programmes asynchrones grùce à l'ajout des mots clés async et await.

Le comportement des closures dans la boucle foreach (en) a été modifié. Il n'est désormais plus nécessaire d'introduire une variable locale dans une boucle foreach pour éviter les problÚmes de closurecite-ref-19[19].

À noter Ă©galement les informations relatives Ă  l'appelantcite-ref-20[20] permettant de connaĂźtre le nom de la mĂ©thode qui a appelĂ© une propriĂ©tĂ©.

C# 6.0

La sixiĂšme version du C# apporte plusieurs modifications, notamment :

Les propriétés implémentées automatiquement (ou propriétés automatiques) sont apparues en C# 3, pour simplifier la déclaration de propriétés qui se contentent d'encapsuler l'accÚs à des champs. Bien qu'elles permettent de rendre le code plus concis, elles présentent un inconvénient : il n'est pas possible de les initialiser au niveau de la déclaration, il faut forcément le faire dans le constructeur. De plus, il n'est pas possible de faire des propriétés automatiques en lecture seule, puisqu'elles n'ont pas de mutateur (setter) et on ne pourrait donc pas leur affecter de valeur.

C# 6 remédie à ce problÚme en permettant d'initialiser les propriétés automatiques au niveau de la déclarationcite-ref-21[21].

C# 7.0

La version 7 du langage apporte de nombreuses nouveautés dont les principales sontcite-ref-22[22]:

‱ Les fonctions locales: la possibilitĂ© de dĂ©clarer une mĂ©thode Ă  l'intĂ©rieur dans une autre mĂ©thode
‱ Tuples et dĂ©construction: cela permet par exemple pour une fonction, de renvoyer plusieurs valeurs
‱ Variables out: une variable peut ĂȘtre dĂ©clarĂ© au moment de l'appel. Par exemple: int.TryParse(s, out int i);
‱ Pattern matching (ou filtrage par motif en français) permet de dĂ©terminer si une valeur correspond Ă  un motif donnĂ©. Exemple avec un switch: cite-ref-23[23]switch (shape) { case Rectangle r: Console.WriteLine($"Rectangle with area {r.Width * r.Height}"); break; case Circle c when c.Radius < 5: Console.WriteLine($"Small circle"); break; case Circle c: Console.WriteLine($"Large circle"); break; }
‱ Membres expression-bodied Ă©tendus
‱ AmĂ©lioration des littĂ©raux numĂ©riques
‱ Retours par rĂ©fĂ©rence

C# 8.0

La version 8 de C# est la premiÚre qui cible spécifiquement .NET Core.

Quelques nouveautés:

‱ les fonction locales statiquescite-ref-fonctionnalit-s-c-8-0-24-0[24]

‱ l'utilisation de using sans bloc de codecite-ref-fonctionnalit-s-c-8-0-24-1[24]:

public void UseDisposableObject()
{
using var disposableObject = new DisposableObject();
// Utilisation de disposableObject
// ...
// disposableObject.Dispose() est exécuté juste avant la sortie de la méthode
}

‱ mĂ©thode d’interface par dĂ©faut
‱ membre de structure readonlycite-ref-25[25]
‱ opĂ©rateur ??= : affecte une valeur uniquement si la variable est nullecite-ref-26[26]
‱ index et plage d’une liste

C# 9.0

La version 9 de C# comprend entre autre les nouveautés suivantescite-ref-27[27]:

‱ les records
‱ l'accesseur init
‱ new(): omission possible du type
‱ les fonctions anonymes statiques
‱ la simplification du code de la fonction Main()
‱ le support de la mĂ©thode d’extension GetEnumerator() pour les boucles foreach

C# 10.0

La version 10 de C# comprend entre autre les nouveautés suivantescite-ref-28[28]:

‱ simplification de la dĂ©claration des namespaces, Ă  la portĂ©e du fichier
‱ amĂ©lioration du pattern matching
‱ amĂ©lioration des expressions lambda
‱ amĂ©lioration des records (introduits avec C# 9)
‱ namespaces implicites (dĂ©clarĂ© au niveau du projet plutĂŽt que dans chaque fichier)

C# 11.0

Les principales nouveautés de la version 11 sontcite-ref-29[29]:

‱ les propriĂ©tĂ©s required qui doivent ĂȘtre obligatoirement initialisĂ©es
‱ les littĂ©raux de chaĂźne bruts. Ces chaĂźnes commencent et se terminent par trois guillemets (""")
‱ les listes patterns
‱ le mot clĂ© file pour la dĂ©claration de type

C# 12.0

La version 12 de C# comprend les nouveautés suivantescite-ref-30[30]:

‱ simplification de code pour la crĂ©ation des collections, comme par exemple: List<int> items1 = [1, 2, 3, 4];
‱ les constructeurs primaires sur les classes ou les structures. Exemple: public class Rectangle(int length, int width);
‱ l'opĂ©rateur spread, pour crĂ©er une collection Ă  partir d'un Ă©numĂ©rable. Exemple: List<int> collection1 = [..array1];
‱ ref only en argument de mĂ©thode

C# 13.0

La version 13 de C#, introduite avec .Net 9, comprend les nouveautés suivantescite-ref-31[31]:

‱ collections params: le mot clĂ© fonctionne avec C# 13 avec tout type de collection
‱ nouvel objet pour la synchronisation de thread: System.Threading.Lock
‱ index à partir de la fin dans les initialisateurs de collection. Par exemple:Value[^1] = 999;
‱ propriĂ©tĂ©s partielles et indexeurs partiels

Standardisation

Le C# a été normalisé par l'ECMA (ECMA-334) en décembre 2001 et par l'ISO/CEI (ISO/CEI 23270) en 2003.

Les modifications survenues dans la Version 2.0 ont été normalisées par l'ECMA (ECMA-334) en juin 2006 et par l'ISO/CEI (ISO/CEI 23270:2006) en septembre 2006.

Microsoft a ouvert le code source de certaines bibliothÚques utilisées par le C# en octobre 2007 sous la licence Microsoft Reference Source License (MS-RSL)cite-ref-32[32].

Nom du langage

Le standard ECMA 334 et l'ISO 23270 dĂ©finissent le nom du langage comme le caractĂšre Unicode 0043 (C majuscule) suivi du caractĂšre 0023 (#)cite-ref-33[33]. Il est prononcĂ© « C sharp » et non « C hash », « sharp » dĂ©signant en effet le symbole musical ♯ mais # Ă©tant nĂ©cessaire pour un accĂšs facile depuis un clavier d'ordinateur qui propose le croisillon (« hash ») Ă  la place.

Le nom "C#" est inspirĂ© de la notation musicale oĂč un diĂšse indique que la note Ă©crite doit ĂȘtre augmentĂ©e d'un demi-ton. Ceci est similaire au nom de langage de C++, oĂč "++" indique qu'une variable doit ĂȘtre incrĂ©mentĂ©e de 1 aprĂšs avoir Ă©tĂ© Ă©valuĂ©e. Le symbole # ressemble Ă©galement Ă  une ligature de quatre symboles "+" (dans une grille deux par deux), ce qui implique que le langage est un incrĂ©ment de C++[rĂ©f. souhaitĂ©e].

Voir aussi

‱ C++
‱ Roslyn (compilateur) (en)

Annexes

Liens externes

‱ site-officielDocumentation C# – DĂ©marrage, tutoriels et informations de rĂ©fĂ©rence | Microsoft Docs
‱ Notice dans un dictionnaire ou une encyclopĂ©die gĂ©nĂ©raliste : Store norske leksikon
‱ Notices d'autoritĂ© : BnF (donnĂ©es) LCCN GND IsraĂ«l TchĂ©quie
‱ (en) Page du standard ISO/CEI 23270:2006
‱ (en) Page du standard ECMA 334
‱ Centre de DĂ©veloppement C# - Site MSDN

Bibliographie

‱ C# et .NET - GĂ©rard Leblanc - 2002 - Éditions Eyrolles - (ISBN 2-212-11066-9)
‱ C# et .NET Version 2 - GĂ©rard Leblanc - 2006 - Éditions Eyrolles - (ISBN 2-212-11778-7)
‱ C# TĂȘte la premiĂšre - Andrew Stellman, Jennifer Greene - 2008 - Éditions Digit Books - (ISBN 978-2-81500-001-7)
‱ Introduction à C# - Pierre-Yves Saumont, Antoine Mirecourt - 2001 - Éditions Eyrolles - (ISBN 2-7464-0301-3)
‱ Le guide de survie C# - Gilles Tourreau - 2010 - Éditions Pearson Education - (ISBN 978-2-7440-2432-0)
‱ (en) C# 2005 Programmer's Reference - Adrian Kingsley-Hughes, Kathie Kingsley-Hughes - 2006 - Édition Wrox - (ISBN 0-470-04641-4)
‱ (en) C# Essentials, 2nd Edition - Ben Albahari, Peter Drayton, Brad Merrill - 2002 - Édition O'Reilly Media - (ISBN 0-596-00315-3)
‱ (en) Professional C#, 3rd Edition - Simon Robinson, Christian Nagel, Karli Watson, Jay Glynn, Morgan Skinner, Bill Evjen - 2004 - Édition Wrox - (ISBN 0-7645-5759-9)

Notes et références

cite-note-wikidata-5d8d057790c69ac436273957122243a1f695f7bd-11. « What's new in .NET 10 »
cite-note-tata-22. (en) Balagurusamy, Programming In C#, Tata McGraw-Hill Education - 2008, (ISBN 9780070667570).
cite-note-33. ↑ neowin-2024paul-hill-neowin-2024(en) Paul Hill Neowin ·, « Godot Engine arrives on Epic Games Store making it easier to download », sur Neowin, 9 mars 2024 (consultĂ© le 9 mars 2024).
cite-note-addison-44. (en) Anders Hejlsberg - Mads Torgersen - Scott Wiltamuth - Peter Golde, The C# Programming Language (Covering C# 4.0), Portable Documents, Addison-Wesley Professional - 2010, (ISBN 9780132481724).
cite-note-essential-55. (en) Mark Michaelis - Eric Lippert, Essential C# 6.0, Addison-Wesley Professional - 2015, (ISBN 9780134176130).
cite-note-66. ↑ (en) « Custom numeric format strings », sur microsoft.com (consultĂ© le 21 avril 2023).
cite-note-77. ↑ (en) « Custom TimeSpan format strings », sur microsoft.com (consultĂ© le 21 avril 2023).
cite-note-88. ↑ Site MSDN
cite-note-99. ↑ learn2023microsoft-learn2023(en) Microsoft Learn, « DllImportAttribute Class (System.Runtime.InteropServices) », sur Microsoft Learn, 16 mai 2023 (consultĂ© le 31 janvier 2025).
cite-note-1010. ↑ (en) Support du cours de sous-typage du MPRI[PDF], diapositives 73-80 et 70-89.
cite-note-1111. ↑ foundationprocessing-foundation(en) Processing Foundation, « Processing Foundation — Processing Community Day @ Worldwide », sur Processing Foundation (consultĂ© le 31 janvier 2025).
cite-note-1212. ↑ (en) https://msdn2.microsoft.com/en-us/vstudio/default.aspx
cite-note-1313. ↑ (en) https://msdn2.microsoft.com/fr-fr/netframework/aa904594.aspx
cite-note-1414. ↑ learn2024microsoft-learn2024(en) Microsoft Learn, « Expression Trees - C#, Microsoft Learn », sur Microsoft Learn, 29 mai 2024 (consultĂ© le 31 janvier 2025).
cite-note-1515. ↑ https://msdn.microsoft.com/fr-fr/library/vstudio/dd264739(v=vs.100).aspx
cite-note-1616. ↑ (en) Site MSDN.
cite-note-1717. ↑ learn2022microsoft-learn2022(en) Microsoft Learn, « Task Parallel Library (TPL) - .NET, Microsoft Learn », sur Microsoft Learn, 1er aoĂ»t 2022 (consultĂ© le 31 janvier 2025).
cite-note-1818. ↑ learn2017microsoft-learn2017(en) Microsoft Learn, « Introduction to PLINQ - .NET, Microsoft Learn », sur Microsoft Learn, 30 mars 2017 (consultĂ© le 31 janvier 2025).
cite-note-1919. ↑ http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx
cite-note-2020. ↑ https://msdn.microsoft.com/fr-fr/library/hh534540.aspx
cite-note-2121. ↑ levesquethomas-levesqueThomas Levesque, « Les nouveautĂ©s de C# 6 » (consultĂ© le 19 septembre 2015).
cite-note-2222. ↑ levesque2016thomas-levesque2016Thomas Levesque, « Les nouveautĂ©s de C# 7 », Developpez.com,‎ 24 novembre 2016 (lire en ligne, consultĂ© le 17 octobre 2025)
cite-note-2323. ↑ montantin2020mathias-montantin2020Mathias Montantin, « Pattern matching (C# 7, C# 8.0) », sur Blog .NET, 17 octobre 2020 (consultĂ© le 17 octobre 2025)
cite-note-fonctionnalit-s-c-8-0-2424. montantin2021mathias-montantin2021Mathias Montantin, « Fonctionnalités C# 8.0 », sur Blog .NET, 6 février 2021 (consulté le 17 octobre 2025)
cite-note-2525. ↑ montantin2020mathias-montantin2020Mathias Montantin, « Membre d'une structure en lecture seule avec readonly (C# 8.0) », sur Blog .NET, 19 dĂ©cembre 2020 (consultĂ© le 17 octobre 2025)
cite-note-2626. ↑ montantin2020mathias-montantin2020Mathias Montantin, « RĂ©fĂ©rences nullables (C# 8.0) », sur Blog .NET, 26 dĂ©cembre 2020 (consultĂ© le 17 octobre 2025)
cite-note-2727. ↑ montantin2021mathias-montantin2021Mathias Montantin, « Les fonctionnalitĂ©s C# 9.0 », sur Blog .NET, 31 dĂ©cembre 2021 (consultĂ© le 20 octobre 2025)
cite-note-2828. ↑ montantin2023mathias-montantin2023Mathias Montantin, « Les fonctionnalitĂ©s C# 10.0 », sur Blog .NET, 30 dĂ©cembre 2023 (consultĂ© le 20 octobre 2025)
cite-note-2929. ↑ « Les nouveautĂ©s de C# 11 - Invivoo », sur invivoo.com (consultĂ© le 20 octobre 2025)
cite-note-3030. ↑ montantin2025mathias-montantin2025Mathias Montantin, « Les fonctionnalitĂ©s C# 12 », sur Blog .NET, 16 aoĂ»t 2025 (consultĂ© le 29 octobre 2025).
cite-note-3131. ↑ bourennane2024abdelkrim-bourennane2024Abdelkrim Bourennane, « Les nouveautĂ©s .NET 9 et C# 13 avec des exemples », sur Le blog de Cellenza, 10 dĂ©cembre 2024 (consultĂ© le 29 octobre 2025)
cite-note-3232. ↑ Microsoft Reference Source License (MS-RSL)
cite-note-3333. ↑ ECMA 334, p. 11

‱ Portail de Microsoft
‱ Portail de la programmation informatique
‱ Portail de l’informatique